let name3 = ["123", "145"];
// 找不到是-1
// console.log(name3.indexOf("123"));

// 2，对象类型
let students = [
  { id: 1, name: "why", age: 13 },
  { id: 2, name: "why2", age: 14 },
  { id: 3, name: "why3", age: 15 },
];
// students.forEach((item) => {
//   item.age = 99;
// });
// console.log(students);
// foreach基本数据类型不可该
// let number = [1, 2, 3, 4];
// number.forEach((item) => {
//   item = item * 2;
// });
// console.log(number);
// forEach 的基本原理也是for循环，使用arr[index]的形式赋值改变，无论什么就都可以改变了。
// 基本类型我们当次循环拿到的ele，只是forEach给我们在另一个地方复制创建新元素，是和原数组这个元素没有半毛钱联系的！所以，我们使命给循环拿到的ele赋值都是无用功！
// 专业的概念说就是：JavaScript是有基本数据类型与引用数据类型之分的。对于基本数据类型：number,string,Boolean,null,undefined它们在栈内存中直接存储变量与值。而Object对象的真正的数据是保存在堆内存，栈内只保存了对象的变量以及对应的堆的地址，所以操作Object其实就是直接操作了原数组对象本身。
// forEach 的基本原理也是for循环，使用arr[index]的形式赋值改变，无论什么就都可以改变了。

// const numArr = [33, 4, 55];

// numArr.forEach((ele, index, arr) => {
//   if (ele === 33) {
//     arr[index] = 999;
//   }
// });
// console.log(numArr);

// // 返回值是该元素
// let res = students.find((item) => {
//   return item.id === 1;
// });

// console.log(res);
// // 修改该元素
// if (res) {
//   res.age = 99;
// }
// console.log(students);
// 对象类型初始化时为null
// let stu = null
// let id = 1;
// for (let i = 0; i < students.length; i++) {
//   if (students[i].id === id) {
//     console.log(students[i]);
//     stu = students[i];
//     break;
//   }
// }
// // if (Object.keys(stu).length) {
// //   console.log("找到啦");
// // } else {
// //   console.log("没有找到");
// // }
// if (stu) {
//   console.log("找到啦");
// } else {
//   console.log("没有找到");
// }

let stu = students.find((item) => {
  if (item.id === 1) return true;
});

console.log(stu);
